package com.ruoyi.common.service.impl;

import com.ruoyi.common.file.Aes256GcmEncryptor;
import com.ruoyi.common.file.FileUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.io.File;

@Service
public class VideoService {
    @Autowired
    private Aes256GcmEncryptor aes256GcmEncryptor;

    // 生成 AES-256 密钥（保存到安全位置，勿硬编码！）
    public String generateVideoKey() {
        return aes256GcmEncryptor.generateKey();
    }

    /**
     * 加密视频
     * @param originalVideoPath 原始视频路径（如 "D:/video/original.mp4"）
     * @param encryptedVideoPath 加密后视频路径（如 "D:/video/encrypted.mp4"）
     * @param base64Key 生成的 AES-256 密钥（Base64 编码）
     */
    public String encryptVideo(String originalVideoPath, String encryptedVideoPath, String base64Key) {
        File originalFile = new File(originalVideoPath);
        File encryptedFile = new File(encryptedVideoPath);

        // AAD 示例：使用文件名 + 时间戳（增强安全性，解密时需一致）
        String aad = FileUtils.getFileNameWithoutExtension(originalFile) + "_" + System.currentTimeMillis();

        aes256GcmEncryptor.encryptFile(originalFile, encryptedFile, base64Key, aad);
        return aad;
    }

    /**
     * 解密视频
     * @param encryptedVideoPath 加密视频路径（如 "D:/video/encrypted.mp4"）
     * @param decryptedVideoPath 解密后视频路径（如 "D:/video/decrypted.mp4"）
     * @param base64Key AES-256 密钥（需与加密时一致）
     * @param aad 加密时使用的 AAD（需完全一致，否则解密失败）
     */
    public void decryptVideo(String encryptedVideoPath, String decryptedVideoPath, String base64Key, String aad) {
        File encryptedFile = new File(encryptedVideoPath);
        File decryptedFile = new File(decryptedVideoPath);

        aes256GcmEncryptor.decryptFile(encryptedFile, decryptedFile, base64Key, aad);
    }
}
